Postmanでのテストの書き方
SBJソリューション部のserinaです。
先日、Postmanでテストを書く機会があったのでやったことをまとめたいと思います。
Postmanとは
Postmanは、API(アプリケーションプログラミングインターフェース)の開発、テスト、デバッグを効率的に行うためのツールです。
ちなみにPostmanの日本法人設立は、2023年12月5日です。
結構最近なことに驚きました。
設定言語に日本語が設定できるようになったのもこの頃らしいので、今は昔に比べると日本語で使える機能が充実していそうです。
テストを書く場所
Scriptに書いていきます。
テストの実行方法
- Run collection
- Run folder
- リクエストを開いて、Sendボタンをクリック
- Monitor (モニター機能)
- Newman (コマンドライン)
MonitorとNewmanは使用したことがないですが、全部で5つほど実行方法があります。
テストの書き方
使用できるjsライブラリ
こちらのページに記載されています。
crypto-jsは使えるが、Cryptoは使用できなかったり、使用できるライブラリは限られています。
認証のセット方法
認証のセット方法は、いくつかあります。
ここでは私が実装したことのある2種類のみ紹介します。
1. CollectionのAuthorizationで設定
まず1つ目は、CollectionのAuthorizationで設定できます。
また、設定したトークンは、APIのAuthorizationで Inherit auth from parent
を選択して使用します。
2. アクセストークン取得用のリクエストを作成して環境変数にセット
もう1つの方法は、アクセストークン取得用のリクエストを作成して環境変数にセットする方法です。
POST {{base_url}}/oauth/token
// Scripts > Post-res
pm.test('response is ok', function () {
pm.response.to.have.status(200);
pm.response.to.have.jsonBody('access_token');
});
pm.environment.set('_access_token', pm.response.json().access_token);
このようにしてセットします。
使用する際は、AthorizationのAuth Typeで Bearer Token
を選択肢、環境変数をセットします。
環境変数は、Environmentsで設定できます。
schema構造をテストする
OpenAPIを使用している場合は、そのschemaをほとんどそのまま使用することができます。
pm.test("Validate response schema", () => {
// Ajvインスタンスの作成
const Ajv = require('ajv');
const ajv = new Ajv({ allErrors: true, format: 'full' });
// スキーマの定義
const schema = {
"type": "object",
"properties": {
"id": { "type": "integer" },
"name": { "type": "string" },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 0 }
},
"required": ["id", "name", "email", "age"]
};
// レスポンスのバリデーション
const valid = ajv.validate(schema, pm.response.json());
if (!valid) {
console.log(ajv.errors);
}
pm.expect(valid, JSON.stringify(ajv.errors)).to.be.true;
});
注意点として、nullが返却される場合にtypeをintegerのみにしておくとエラーになります。
"type": ["integer", "null"]
と書かないとテストは成功しません。
Postman用のschemaをOpenAPIから生成する方法がないかについては、調べてみてるのですが良い方法が見つけられてないです。。。
見つかったらまた記事書きます。
見つかったらまた記事書きます。
Scriptsで別のテストを呼ぶ
setNextRequest
を使用するとScriptsからAPIを呼びことができます。
pm.execution.setNextRequest(pm.info.requestId);
この場合は、pm.info.requestId
で自身のAPIのrequestIdを取得して再帰しています。
429エラーのテストでn回目に429になることをテストしたい場合などに使用できるかと思います。
また、テストに書くほどでもなければRun collectionやRun folder実行の際にIterationsを設定することで同様のことができます。
最後に
Postmanでしっかりとしたテストを書くのは初めてでしたが、作成しておけば動作確認やテストが容易になるのでとても良いなと思いました!